"""
@Description :   网络参数
@Author      :   python_assignment_group 
@Time        :   2022/10/30 07:22:54
"""

import os

import torch

device = torch.device(
    "cuda") if torch.cuda.is_available() else torch.device("cpu")

nets_names = [ "Word2VecCNNNet", "FastTextNet", "BertNet"] # 所有的网络名称
# train/test里要按照这个顺序训练/测试

train_configs = [
    # CNN
    {
        # 数据预处理
        "resplit_data": False,  # 是否重新分割数据集
        "test_percent": 0.1,  # 测试集占比
        "raw_data_path": os.path.join("raw_data", "train.tsv"),
        "data_split_num": 3,  # 训练次数

        # 网络训练
        "labels_num": 5,  # 标签的种类
        "batch_size": 64,  # 批大小
        "lr": 5e-7,  # 初始的学习率
        "epoch_num": 10,  # 训练轮数
        "weight_dacay_rate": .97,  # 权值衰减系数
        "random_seed": 42,  # 随机数种子，用于调试

        # 缓存&测试
        "gen_cache": True,  # 是否生成缓存
        "use_cache": False,  # 是否进行断点续训练
        "cache_path": os.path.join("cache", "word2vec_cnn_net"),  # 模型状态缓存路径
        "buffer_name": "第6个epoch时模型的参数.pkl",  # 模型状态缓存名称
        "test_buffer_name": "newest.pkl",

        # 用于画图的信息
        "log_path": os.path.join("log", "word2vec_cnn_net"),  # 日志路径
        "figs_path": os.path.join("figs", "word2vec_cnn_net")  # 图片保存路径
    },
    # FastTextNet
    {
        # 数据预处理
        "resplit_data": False,  # 是否重新分割数据集
        "test_percent": 0.1,  # 测试集占比
        "raw_data_path": os.path.join("raw_data", "train.tsv"),
        "data_split_num": 3,  # 训练次数

        # 网络训练
        "labels_num": 5,  # 标签的种类
        "batch_size": 64,  # 批大小
        "lr": 5e-7,  # 初始的学习率
        "epoch_num": 10,  # 训练轮数
        "weight_dacay_rate": .97,  # 权值衰减系数
        "random_seed": 42,  # 随机数种子，用于调试

        # 缓存&测试
        "gen_cache": True,  # 是否生成缓存
        "use_cache": False,  # 是否进行断点续训练
        "cache_path": os.path.join("cache", "fast_text_net"),  # 模型状态缓存路径
        "buffer_name": "第6个epoch时模型的参数.pkl",  # 模型状态缓存名称
        "test_buffer_name": "best.pkl",

        # 用于画图的信息
        "log_path": os.path.join("log", "fast_text_net"),  # 日志路径
        "figs_path": os.path.join("figs", "fast_text_net")  # 图片保存路径
    },
    # Bert
    {
        # 数据预处理
        "resplit_data": False,  # 是否重新分割数据集
        "test_percent": 0.1,  # 测试集占比
        "raw_data_path": os.path.join("raw_data", "train.tsv"),
        "data_split_num": 3,  # 训练次数

        # 网络训练
        "labels_num": 5,  # 标签的种类
        "batch_size": 16,  # 批大小
        "lr": 5e-6,  # 初始的学习率
        "epoch_num": 10,  # 训练轮数
        "weight_dacay_rate": .97,  # 权值衰减系数
        "random_seed": 42,  # 随机数种子，用于调试

        # 缓存&测试
        "gen_cache": True,  # 是否生成缓存
        "use_cache": False,  # 是否进行断点续训练
        "cache_path": os.path.join("cache", "bert_net"),  # 模型状态缓存路径
        "buffer_name": "第6个epoch时模型的参数.pkl",  # 模型状态缓存名称
        "test_buffer_name": "best.pkl",

        # 用于画图的信息
        "log_path": os.path.join("log", "bert_net"),  # 日志路径
        "figs_path": os.path.join("figs", "bert_net")  # 图片保存路径
    },
]
